
const fs = require('fs')
const path = require('path')

fs.exists('a/b', function (exists) {  // 判断当前文件目录 是否已经存在  回调参数不符合规范 已弃用
    // console.log(exists)
})

fs.stat('a/b', function (err) {  // 判断当前文件目录 是否已经存在  用来替代 exists
    if (!err) {
        // console.log("存在")
    }
})

fs.lstat('a/b', function (err) {  // 判断当前文件目录 是否已经存在  
    if (!err) {
        // console.log("存在")
    }
})

const mkdir = function (dirPath, options, cb) {
    if (arguments.length === 2) {
        cb = options
    }
    let pathArr = dirPath.split('/');
    let index = 0

    const next = () => {
        if (pathArr.length === index) return cb()
        let url = pathArr.slice(0, ++index).join('/')
        fs.stat(url, function (err) {
            if (err) {
                fs.mkdir(url, next)
            } else {
                next()
            }
        })
        next()
    }
    next()


}

// fs.mkdir('a/b/c/d', { recursive: true }, function (err) {
// mkdir('a/b/c/d', { recursive: true }, function (err) {
//     if (!err) {
//         console.log("success")
//     }
// })


/**
 * mkdir  创建文件夹
 * - path  a 在当前目录下创建   /a在根目录下创建
 * recursive 参数： 是否允许连续创建 a/b/c/d  无此参数 则创建不成功
 * 
 */


function rmdir(dirPath, cb) {
    fs.readdir(dirPath, function (err, dirs) {
        // console.log(err, dirs) // [b, c.js]
        console.log(dirs)
        dirs = dirs.map(v => path.join(dirPath, v))
        console.log(dirs)
        if (dirs.length > 0) {
            let index = 0
            const next = () => {
                if (dirs.length === index) return fs.rmdir(dirPath, cb)
                let url = dirs[index++]
                fs.stat(url, function (err, stat) {
                    if (err) return
                    if (stat.isDirectory()) {

                        fs.rmdir(url, next)
                    } else {
                        fs.unlink(url, next)
                    }
                })

            }
            next()

        }
    })

}

rmdir('a', function (err) {  //
    // fs.rmdir('a/b', { recursive: true }, function (err) {  //
    console.log('删除成功')
})
/**
 *  rmdir   删除文件 当文件中包含其他文件时 无法删除
 *  recursive 参数： 是否允许连续删除 a/b/c/d  无此参数 则删除不成功
 *   readdir  读文件，返回文件名 以数组形式
 *   path.join 路径拼接
 *   unlink  删除文件
 *   stat.isDirectory() 是否文件夹
 *   作业：  串行删除   并发删除   广度倒叙删除
 */ 


 // rmdir  unlink  stat  isDirectory isFile